package com.woniuxy.core.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

/**
 * JWT解析工具类
 */
public class JwtUtil {
    /**
     * 用户加密令牌
     */
    static String userSect ="sjcdiyvhalhxyajlsjvgdoplmcqjfsoa";
    /**
     * 管理员加密令牌
     */
    static String accountSect ="ksaasfdasdfadsfwfrasdfsadffcasijfasadfasfdlkfjlasjflksajfd";

    /**
     * 创建用户token
     * @param body 需加密的信息
     * @param mil 过期时间
     * @return 字符串
     */
    public static String createUserToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(userSect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }

    /**
     * 解析用户token
     * @param token 字符串
     * @return 之前创建所保存的信息
     */
    public static Claims parseUserToken(String token) {
        Key key = Keys.hmacShaKeyFor(userSect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    /**
     * 创建管理员token
     * @param body 需加密的信息
     * @param mil 过期时间
     * @return 字符串
     */
    public static String createAccountToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(accountSect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }

    /**
     * 解析管理员token
     * @param token 字符串
     * @return 之前创建所保存的信息
     */
    public static Claims parseAccountToken(String token) {
        Key key = Keys.hmacShaKeyFor(accountSect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    /**
     * 解析并提取指定信息
     * @param token 字符串
     * @param key 关键词
     * @return 关键词的值
     */
    public static Object getData(String token,String key){
        Claims claims = parseAccountToken(token);
        return claims.get(key);
    }
}
